import os
from flask import Flask, render_template, request, jsonify
from openai import OpenAI
import random
from flask_cors import CORS

app = Flask(__name__)
# 允许所有来源的跨域请求
CORS(app, resources={r"/*": {"origins": "*"}})

client = OpenAI(
    base_url="https://ai.gitee.com/v1",
    api_key="P6KUZVTKMCMQILNRKNYVTB6PJFBOFUPOEGHRSJ5H",
    default_headers={"X-Failover-Enabled": "true"},
)

# 预设沙具及其象征意义
sand_tools = {
    "桥": "代表沟通障碍或连接不同的心理状态",
    "灯塔": "象征危机预警或指引方向",
    "枯萎的树": "象征心理疲惫",
    "城堡": "代表内心的安全感和防御机制",
    "小船": "可能表示在人生的海洋中探索或寻求改变"
}

# 心理游戏测试列表
psychological_games = [
    "房树人测试：请你在纸上画出房子、树和人，然后我们可以一起分析你的潜意识。",
    "罗夏墨迹测试：给你呈现一些墨迹图片，你描述看到的内容，以此分析你的心理状态。",
    "主题统觉测试：根据图片编故事，通过故事内容了解你的内心世界。"
]

@app.route('/')
def index():
    return app.send_static_file('index.html')

import logging

# 配置日志
logging.basicConfig(level=logging.ERROR)

@app.route('/chat', methods=['POST'])
def chat():
    if request.json is None:
        return jsonify({"error": "Request body is not a valid JSON"}), 400
    user_message = request.json.get('message')
    if not user_message:
        return jsonify({"error": "Message is required"}), 400

    conflict_level = random.randint(1, 3)
    if conflict_level == 1:
        rule = "现在你可以自由摆放沙具，没有特别限制。"
    elif conflict_level == 2:
        rule = "你每次只能摆放一个沙具，并且要说明摆放的原因。"
    else:
        rule = "你只能在沙盘的一半区域摆放沙具，且沙具种类不能超过三种。"

    try:
        response = client.chat.completions.create(
            model="QwQ-32B",
            stream=False,
            max_tokens=2048,
            temperature=1,
            top_p=0.2,
            extra_body={
                "top_k": 50,
            },
            frequency_penalty=0,
            messages=[
                {
                    "role": "system",
                    "content": "你是电子校园调解沙盘，精通心理学、社会学、政治学，了解所有心理疾病。你要引导用户想象出一个沙盘并设计摆放，分析解读用户摆放的沙盘，猜测对方情绪心理，揭示深层心理冲突，还能推荐心理游戏测试，以游戏化形式降低防御心理。根据实时互动调整沙盘规则，适配不同冲突等级。"
                },
                {
                    "role": "user",
                    "content": user_message + f" 沙盘规则: {rule}"
                }
            ],
        )

        response_text = "抱歉，没有获取到有效的回复。"
        if response.choices and len(response.choices) > 0 and response.choices[0].message:
            response_text = response.choices[0].message.content

        if random.random() < 0.3:
            game = random.choice(psychological_games)
            if response_text is not None and game is not None:
                response_text += "\n另外，我推荐你试试这个心理游戏：" + game

        return jsonify({"response": response_text, "rule": rule})
    except Exception as e:
        logging.error(f"OpenAI 请求出错: {str(e)}")  # 记录错误日志
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    app.run(debug=True, port=5001)